Хотя в .NET можно программировать, используя лишь компилятор командной строки, намного легче и приятнее использовать Visual Studio.NET. В этом приложении мы рассмотрим основы использования среды Visual Studio для редактирования, компиляции, запуска и отладки программ. Ознакомившись с ним, вы будете готовы использовать Visual Studio при знакомстве с остальными частями книги. В приложении рассмотрены основы, достаточные для того, чтобы вы смогли начать самостоятельно использовать Visual Studio. Дополнительная информация о возможностях Visual Studio излагается в главах книги по мере необходимости. При написании этой книги использовались бета-версии программного обеспечения, так что коммерческие его версии могут немного отличаться от описанных здесь. Кроме того, Visual Studio — сложное приложение для Windows, с широкими возможностями конфигурирования, поэтому могут отличаться также конфигурации окон и т.д. При знакомстве с Visual Studio у вас есть хорошая возможность почувствовать себя исследователем нового мира, богатого и разнообразного.
Открыв Microsoft Visual Studio.NET 7.0, вы увидите стартовое окно, подобное
Рис А 1 Главное окно Visual Studio NET
Рис. А.2. Страница выбора профиля Visual Studio NET
Для того чтобы получить представление о разнообразии возможностей Visual Studio NET, откройте консольное решение Bank в папке АррА (Для этого выберите пункт меню File => Open Solution (Файл => Открыть решение ), перейдите в папку Bank и откройте файл Bank sin ) Вы сразу же увидите несколько различных окон См рис. A.3.
Рис. А.3. Консольный проект в Visual Studio NET
Слева в окне находятся пиктограммы Server Explorer (Проводник по серверам) и Tool box (Инструментальная панель) Правее от них — главное окно в котором отображается программный код, хранимый в файле Bank cpp Ниже главного окна расположено окно вывода (Output), в котором выводится служебная информация, такая как результаты сборки и т п Далее, в правом верхнем углу находится Solution Explorer (Поиск решения), в удобочитаемом виде показывающий список файлов, содержащийся в "решении", которое, в свою очередь, может состоять из нескольких "проектов ' В правом нижнем углу находится окно свойств (Properties), с помощью которого можно легко изменять свойства форм приложения Windows Окно свойств (Properties) очень похоже на одноименное окно в Visual Basic
С помощью Solution Explorer (Поиск решений) можно найти любой файл проекта Выполните двойной щелчок на пиктограммах файлов Account h и Bank h, яв ляющихся файлами исходных кодов проекта Bank В главном окне откроется окно текстового редактора Вкладки вверху главного окна позволяют легко перемещаться от одного открытого файла к другому Кроме того, Visual Studio NET позволяет выбирать показываемое окно в меню Windows (Окно) Для примера на рис А 4 изобра жено главное окно с горизонтальной линейкой вкладок, соответствующих разным исходным файлам
Рис. А.4. Горизонтальная линейка вкладок для открытых
файлов исходных кодов
В Visual Studio предусмотрено множество панелей инструментов. Пользователь легко может определить, какие из панелей отображать, и перетащить любую из них в то место, которое он посчитает наиболее подходящим. Кроме того, можно переделывать панели, добавляя или удаляя из них кнопки, соответствующие различным командам.
Выбор панелей инструментов, выводимых на экран, производится в пункте меню
View => Toolbars (Вид => Панели инструментов). То же самое можно сделать,
щелкнув правой кнопкой мыши на какой-либо панели. В появившемся при этом меню
названия показываемых панелей инструментов будут отмечены галочками. Щелкнув
на названии панели инструментов, можно заставить появиться или исчезнуть соответствующую
панель инструментов. Для удобства работы с примерами, используемыми в книге,
добавьте панели инструментов
Изменение панелей инструментов
Прежде чем продолжать знакомить вас с Visual Studio, мы хотим быть уверены,
что на панели инструментов Debug (Отладка) в вашей версии Visual Studio есть
кнопка, соответствующая команде "Start Without Debugging" ("Запуск
без отладки"). Если ее всетаки нет (на ней изображен красный восклицательный
знак), ее несложно добавить на панель, следуя общей процедуре добавления любых
кнопок на любую панель инструментов:
1. Выберите пункт меню Tools => Customize (Сервис => Настройка...) для
вызова диалогового окна настройки Customize.
2. Выберите вкладку Commands (Команды).
3. В окне Categories (Категории) выберите пункт (Отладка), а в окне Commands (Команды) — пункт "Start Without Debugging" ("Запуск без отладки"). См. рис. А.5.
4. Перетащите выбранную команду на инструментальную панель Debug (Отладка), поместив ее там, где сами сочтете подходящим. Рекомендуемое для нее место — непосредственно после кнопки Start (Пуск) с изображением клина.
5. Закройте диалог Customize (Настройка).
В качестве первого упражнения по использованию Visual Studio создадим простое консольное приложение. Создаваемая программа Bytes будет производить подсчет количества байтов в килобайте, мегабайте, гигабайте и терабайте. Если вы хотите сопровождать чтение реальными действиями, можете воспользоваться файлами, находящимися в папке Demos. Первая версия программы находится в папке BytesXStepl, окончательная — в папке Bytes\Step3.
Рис. А. 5. Добавление команды на панель инструментов
6. Выберите в главном меню Visual Studio пункт FileONewOProject (Файл^СоздатьО Проект ) Это приведет к появлению диалога New Project (Новый проект)
7. В окне Project Types (Типы проектов) выберите "Visual C++ Projects" ("Проекты Visual C++"), а в окне Templates (Шаблоны) — "Managed C++ Application" ("Приложение Managed C++")
8. Щелкните на кнопке Browse (Обзор), найдите папку Demos и щелкните на кнопке Open (Открыть)
9. В поле Name (Имя) наберите Bytes См рис А 6 Щелкните на кнопке ОК
Рис. А.6. Создание консольного проекта Managed C++
К этому моменту у нас есть проект на Managed C++, в файле Bytes cpp есть главная функция mam, но сама она не реализована Поэтому теперь нам следует добавить в проект файл Bytes h, содержащий описание класса, в том числе и главный метод Мат, вызываемый из главной (main) функции в файле Bytes cpp
10. В окне Solution Explorer (Поиск решений) щелкните правой кнопкой мыши
на пиктограмме файла Bytes.cpp и выберите во всплывшем меню пункт Add =>
Add New Item (Добавить => Добавить новый элемент ) Это приведет к появлению
диалога Add New Item (Добавить новый элемент)
11. В окне Categories (Категории) выберите пункт "Visual C++", а в окне Templates (Шаблоны) — пункт "Header file ( h)" ("Заголовочный файл ( h)")
12. В поле Name (Имя) наберите Bytes.h См рис. А.7 Щелкните на кнопке Open
(Открыть)
Рис. А.7. Добавление пустого файла заголовков в проект на C++
Выполните двойной щелчок на пиктограмме файла Bytes h в Solution Explorer (Поиск решения) Это приведет к открытию пустого файла Bytes. h в текстовом редакторе Visual Studio Наберите в нем следующую программу и обратите внимание на подсветку зарезервированных слов
//Bytes.h - Stepl
public _gc class Bytes
// общедоступный класс сборщика мусора Байты
{
public.
// общедоступный:
static void Main()
// статическая Главная
{
Int64 bytes = 1024; // Int64 байты = 1024;
Console:.WriteLine("kilo = {0}", _box(bytes));
bytes = bytes * 1024;
Console::WriteLine("mega = {0}", _box(bytes)),
bytes = bytes * 1024;
Console-:WriteLine("giga = {0}", _box(bytes)),
bytes = bytes * 1022,
Console::WriteLine("tera = {0}", _box(bytes));
}
};
Выделение зарезервированных слов— не единственное достоинство текстового редактора Visual Studio. Кроме этого, текстовый редактор Visual Studio автоматически делает необходимые отступы. И вообще, редактор Visual Studio является дружественным и удобным в использовании.
Щелкните дважды на пиктограмме файла Bytes . cpp в Solution Explorer (Поиск решения). Это приведет к открытию в текстовом редакторе Visual Studio уже существующего файла Bytes . cpp. Теперь мы должны вставить вызов метода Main класса Bytes из главной (main) функции программы. Для этого необходимо также включить заголовочный файл Bytes . h с помощью директивы ttinclude.
#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;
#include "Bytes.h"
#ifdef _UNICODE
int wmain(void)
telse
int main(void)
#endif
{
Bytes::Main();
return 0;
}
Чтобы скомпилировать приложение, можно использовать одно из следующих средств:
пункт меню Buildo Build; пиктограмму на панели инструментов; сочетание клавиш Ctrl-Shift-B.Запустить программу можно одним из следующих способов:
выбрав пункт меню Debug => Start Without Debugging (Отладка => Запуск без отладки); щелкнув на кнопке панели инструментов; нажав сочетание клавиш Ctrl-FS.Результатом работы программы будет появление окна консоли со следующим текстом (при нажатии на любую клавишу окно будет закрыто).
kilo = 1024
mega = 1048576
giga = 1073741824
tera = 1097364144128
Press any key to continue
Запустить программу в отладчике можно одним из следующих способов:
выбрав пункт меню DebugOStart (ОтладкаОЗапуск); щелкнув на кнопке панели инструментов; нажав клавишу F5.Окно консоли при этом будет открыто и сразу же закрыто. Чтобы окно осталось открытым, необходимо изменить программу. Для этого можно вставить, например, ожидание ввода с клавиатуры. Для остановки выполнения программы можно использовать точки останова. Ниже в этом приложении мы еще рассмотрим возможности отладчика.
Конфигурация проекта определяет параметры компоновки приложения. Одновременно может быть определено несколько различных конфигураций, причем приложение для каждой из них будет создаваться в отдельной папке, так что у вас есть возможность сравнить эти конфигурации. Изначально каждый проект в решении Visual Studio имеет две конфигурации — Debug (Отладка) и Release (Выпуск). При использовании конфигурации Debug (Отладка) будет создаваться отладочная версия проекта, с помощью которой можно осуществлять отладку на уровне исходного кода посредством установки точек останова и т.д. В папке Debug (Отладка) при этом будет находиться файл, используемый компоновщиком для записи отладочной информации о пользовательской программе с целью ускорения редактирования связей в режиме отладки. Этот файл имеет расширение .pdb и содержит отладочную информацию, а также информацию о состоянии проекта.
Необходимую конфигурацию можно выбрать с помощью элемента списка Debug (Отладка) на главной панели инструментов. То же самое можно сделать, выбрав пункт меню BuildoConfiguration Manager... (КомпоновкаОДиспетчер конфигурации...), что приведет к запуску диалога Configuration Manager (Диспетчер конфигурации). Из выпадающего списка Active Solution Configuration (Текущая конфигурация решения) выберите пункт Release (Выпуск). См. рис. А.8.
Скомпонуйте проект еще раз. Теперь создана вторая версия программы Bytes.exe на Managed C++, причем на этот раз она помещается в папку Release (Выпуск).
Иногда необходимо создать дополнительную конфигурацию, в которой будут установлены параметры создания приложения, отличающиеся от принятых в существующих конфигурациях.
В качестве примера создадим конфигурацию, которая будет помещать исполняемую программу в отдельной папке. В Visual Studio параметры создания устанавливаются с помощью диалоговых окон. Приведенная ниже последовательность действий позволит создать новую конфигурацию, называющуюся AlternateDebug. Чуть позже эта конфигурация будет изменена так, чтобы исполняемая программа помещалась в папку AlternateDebug.
1. Вызовите диалог Configuration Manager (Диспетчер конфигурации).
2. Раскройте список Active Solution Configuration (Текущая конфигурация решения) и выберите в нем пункт <New...> (<Создать...>). Появится диалог New Solution Configuration (Создание конфигурации решения).
3. Введите AlternateDebug в качестве названия конфигурации. В списке Copy
Settings from (Скопировать параметры из) выберите пункт Debug (Отладка). Установите
флажок Also create new project configuration(s) (Создать также новую конфигурацию
проекта), как показано на рис. А.9. Щелкните на кнопке ОК.
Рис. А.8. Выбор конфигурации Release (Выпуск) в Configuration
Manager (Диспетчер конфигурации)
Теперь давайте установим параметры компоновки приложения для новой конфигурации. (Если вас не устраивают параметры, установленные в стандартных конфигурациях, вы можете изменить и эти конфигурации.) Посмотрите на панель инструментов и убедитесь, что активной является созданная конфигурация AlternateDebug.
Рис. А.9. Создание новой конфигурации
После выполнения указанных ниже действий вы обнаружите, что программа Bytes. exe будет в дальнейшем помещаться в папку Bytes\AlternateDebug.
4. Щелкните правой кнопкой на папке Bytes в Solution Explorer (Поиск решения) и выберите во всплывшем меню пункт Properties (Свойства). Появится диалог "Bytes Property Pages" ("Страница параметров Bytes").
5. С помощью средства Configuration Properties (Свойства конфигурации) выберите
пункт General (Общие). Измените содержимое поля "Output Directory"
("Выходная папка") на AlternateDebug, как показано на рис. А.10. Щелкните
на кнопке ОК.
Рис. А.10. Изменение параметров компоновки в конфигурации
В этом разделе мы обсудим некоторые возможности отладки Visual Studio. Для того чтобы воспользоваться возможностью отладки на уровне исходного кода, следует создать исполняемые файлы в конфигурации Debug (Отладка), обсужденной выше. Существуют две возможности войти в отладчик:
Оперативная отладка (Just-in-Time Debugging). Программа работает обычным образом, но если возникает исключение, вы получите возможность запустить отладчик. Программа терпит крах, так что вы не сможете ни продолжить ее выполнение, ни сделать следующий шаг, ни установить точку останова или предпринять что-то подобное. Тем не менее, вы сможете просмотреть значения переменных и узнать, в каком именно месте программы остановилось ее выполнение. Обычная отладка (Standard Debugging). Программа запускается под отладчиком. При этом можно установить точки останова, выполнение в пошаговом режиме и т.д.Для того чтобы увидеть, как работает оперативная отладка, введем в программу код, вызывающий необрабатываемое исключение. Этот пример находится в папке Bytes\Step2. Деление на ноль в нем приведет к возникновению исключения DivideByZeroException.
//Bytes.h - Step2
public _gc class Bytes
// общедоступный класс сборщика мусора Байты
{
public:
// общедоступный:
static void Main()
// статическая Главная ()
{
Int64 bytes = 1024;
Console::WriteLine("kilo = {0}",
_box(bytes));
int zero =0; // обнулить
int i = zero;
}
};
Создайте и запустите (не отлаживая) программу Bytes из папки Bytes\Step2, убедившись перед этим, что она скомпонована в конфигурации Debug (Отладка) Эта версия программы не сможет корректно завершиться, и возникнет исключение Появится диалог "Just-In-Time Debugging" ("Оперативная отладка"), как показано на рис. А.11 Щелкните на кнопке Yes (Да), чтобы начать отладку
Рис. А.11. Диалог "Just-In-Time Debugging"("Оперативная отладка"),
появляющийся при возникновении исключения
Щелкните на кнопке "ОК." в диалоге "Attach to Process" ("Присоединиться к процессу"), а затем — на кнопке Break (Прервать) в диалоге "Microsoft Development Environment" (Среда разработки Microsoft) Теперь перед вами окно с исходным кодом программы, во время выполнения которой возникла ошибка При этом стрелка указывает на строку, где эта ошибка произошла
Для остановки отладки можно использовать кнопку останова на панели инструментов
или пункт меню Debug => Stop Debugging (Отладка => Сброс)
Обычным способом использования отладчика является установка точек останова, и последующий запуск прдграммы под отладчиком Для примера, установим точку останова на первой строке
bytes = bytes * 1024; // байты = байты * 1024;
Простейший способ установить точку останова — щелкнуть на сером поле слева от окна с исходным кодом программы Можно также переместить курсор на нужную строку и щелкнуть на кнопке "Точка останова" на панели инструментов Щелчок на этой кнопке установит точку останова, если ее там не было, и, наоборот, уберет ее, если она уже была установлена на этой строке Теперь, если запустить программу под отладчиком, ее выполнение остановится при достижении точки останова Желтая стрелка на красном кружке, обозначающем точку останова, указывает, на какой именно точке останова прервано выполнение программы (рис. А.12.)
Рис. А.12. Выполнение программы приостановлено в точке останова
Закончив использование точек останова, можете удалить их, щелкнув на сером поле слева от окна с исходным кодом или на кнопке "Точка останова", расположенной на панели инструментов Если необходимо удалить сразу все точки останова, можно использовать пункт меню Debug => Clear All Breakpoints (Отладка => Снять все точки останова) или соответствующую кнопку на панели инструментов
Контрольные значения
Теперь можно просмотреть значения переменных Простейший способ это сделать — навести указатель мыши на переменную, и во всплывающей подсказке (на желтом фоне) около курсора будет выведено значение переменной Можно также щелкнуть правой кнопкой мыши на переменной и выбрать пункт Quick Watch (Контрольное значение) во всплывшем меню (или воспользоваться кнопкой Контрольное значение с изображением очков на панели инструментов) На рис. А.13. показано типичное окно контрольного значения В этом окне можно также изменить значение переменной
Рис. А.13. В окне контрольного значения (Quick Watch) отображается текущее значение
переменной, при необходимости его можно изменить
Остановив с помощью отладчика выполнение программы можно добавить переменную в окно просмотра, щелкнув на ней правой кнопкой мыши и выбрав пункт Add Watch (Добавить контрольное значение) во всплывшем меню В окне Watch (Контрольное значение) может отображаться несколько переменных, и оно остается открытым во время выполнения программы При изменении значения переменной новое значение выделяется красным На рис. А.14. показан пример окна Watch (Контрольное значение) Заметьте, что значение переменной выводится в виде шестнадцатеричного числа, как изменить представление переменной объясняется ниже
Рис. А.14. Окно Watch (Контрольное значение)
Параметры отладчика
Параметры отладчика можно изменить, выбрав пункт меню Tools => Options (Сервис => Параметры) и затем элемент Debugging (Отладка) из списка Рис. А.15 иллюстрирует установку представления значений переменных в виде шестнадцатеричных чисел Если вернуться теперь к окну Watch (Контрольное значение), то можно заметить, что значения переменных отображаются в виде шестнадцатеричных чисел, например, 0x4
Рис. А.15. Диалоговое окно Options (Параметры) Установка параметров отладчика
теперь отладчик будет отображать значения переменных в шестнадцатеричном формате
Выполнение в пошаговом режиме
После остановки программы отладчиком можно продолжить ее выполнение в пошаговом режиме В том же режиме выполнение программы можно и начать Есть несколько кнопок, предназначенных для выполнения в пошаговом режиме Наиболее часто используются следующие из них (в порядке расположения на панели инструментов)
Step Into (Шаг с заходом), Step Over (Шаг с обходом), Step Out (Шаг с выходом) Есть еще одна кнопка — Run to Cursor (Выполнить до текущей позиции)
Если курсор находится на вызове какой-либо функции, то при щелчке на кнопке Step Into (Шаг с заходом) он перейдет на первую строку этой функции Если же щелкнуть на кнопке Step Over (Шаг с обходом), произойдет вызов функции и курсор переместится на следующую строку (или выражение, или инструкцию, — в зависимости от пункта, выбранного в выпадающем списке Line, находящемся справа от кнопок выполнения в пошаговом режиме) Для иллюстрации действия кнопки Step Into (Шаг с заходом) можно использовать проект Bytes\Step3, в котором умножение на 1024 оформлено в виде отдельного статичного метода MultiplyByOneK Установите точку останова на первом вызове метода и щелкните на кнопке Step Into (Шаг с заходом) Результат показан на рис А 16 Красной точкой отмечено положение точки останова, желтой стрелкой — текущее положение указателя
При отладке Visual Studio поддерживает средство Call Stack (Стек вызова) Для
того чтобы просмотреть стек вызова, выберите пункт меню Debug => Wmdows =>
Call Stack (Отладка => Окно => Стек вызова) В нашем примере стек вызова
имеет глубину всего в четыре вызова (рис. А.17.)
Рис. А.16. Выполнение функции в пошаговом режиме: использование кнопки Step
Into (Шаг с заходом)
Рис. А.17. Стек вызова отображается в диалоговом окне Call Stack (Стек вызова)
Visual Studio.NET— интегрированная среда разработки (IDE), имеющая обширные возможности, облегчающие создание приложений. В этом приложении мы рассмотрели основы использования Visual Studio для редактирования, компиляции, запуска и отладки программ, так что читатель сможет использовать Visual Studio при чтении книги. Тем не менее, стоит потратить время на более близкое знакомство со многими другими возможностями Visual Studio, так как их использование может значительно облегчить процесс создания приложений. Проект может быть создан в различных конфигурациях, например, Debug (Отладка) или Release (Выпуск). Visual Studio.NET предоставляет широкий выбор возможностей, предназначенных для создания приложений с базами данных, приложений для работы во всемирной паутине, компонентов и многих других типов проектов. Некоторые из этих возможностей обсуждаются в книге там, где это уместно.